package com.zshan.clinic.admin.mapper.medical;


import com.zshan.clinic.admin.entity.vo.*;
import com.zshan.clinic.database.model.ClinicMedicalExam;
import com.zshan.clinic.database.model.ClinicMedicalRx;
import com.zshan.clinic.mybatis.SuperMapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDate;
import java.util.List;

/**
 *
 * @author lichen
 */
public interface SpecClinicMedicalMapper extends SuperMapper {

    /**
     * 查询患者就诊数
     * @param clinicId
     * @param patientId
     * @param visitDate
     * @return
     */
    Long getPatientMedicalCount(@Param("clinicId") Long clinicId,
                                @Param("patientId") Long patientId,
                                @Param("visitDate") LocalDate visitDate);

    /**
     * 查询患者就诊记录
     * @param clinicId
     * @param patientId
     * @param visitDate
     * @param offset
     * @param limit
     * @return
     */
    List<ClinicMedicalPatientVo> getPatientMedicalList(@Param("clinicId") Long clinicId,
                                                       @Param("patientId") Long patientId,
                                                       @Param("visitDate") LocalDate visitDate,
                                                       @Param("offset") Integer offset,
                                                       @Param("limit") Integer limit);

    /**
     * 获取门诊患者列表
     * @param clinicId
     * @param patientName
     * @param doctorList
     * @param visitDate
     * @param offset
     * @param limit
     * @return
     */
    List<ClinicMedicalPageVo> getMedicalList(@Param("clinicId") Long clinicId,
                                             @Param("patientName") String patientName,
                                             @Param("doctorList") List<Long> doctorList,
                                             @Param("visitDate") LocalDate visitDate,
                                             @Param("offset") Integer offset,
                                             @Param("limit") Integer limit);

    /**
     * 查询患者历史就诊数
     * @param clinicId
     * @param patientId
     * @return
     */
    Long getRecordCount(@Param("clinicId") Long clinicId,
                        @Param("patientId") Long patientId);

    /**
     * 查询患者就诊历史
     * @param clinicId
     * @param patientId
     * @param offset
     * @param limit
     * @return
     */
    List<MedicalRecordVo> getRecordList(@Param("clinicId") Long clinicId,
                                        @Param("patientId") Long patientId,
                                        @Param("offset") Integer offset,
                                        @Param("limit") Integer limit);

    /**
     * 查询门诊患者病历详情
     * @param clinicId
     * @param medicalId
     * @return
     */
    ClinicMedicalDetailVo getMedicalDetail(@Param("clinicId") Long clinicId,
                                           @Param("medicalId") Long medicalId);

    /**
     * 查询病历病历处方
     * @param clinicId
     * @param visitNo
     * @param rxIdList
     * @return
     */
    ClinicMedicalDetailVo getMedicalPayRxList(@Param("clinicId") Long clinicId,
                                              @Param("visitNo") String visitNo,
                                              @Param("rxIdList") List<Long> rxIdList);

    /**
     *
     * 批量添加项目
     * @param examList
     */
    void addMedicalExamBatch(@Param("examList") List<ClinicMedicalExam> examList);

    /**
     * 批量添加处方
     * @param rxList
     */
    void addMedicalRxBatch(@Param("rxList") List<ClinicMedicalRx> rxList);

    /**
     * 批量修改
     * @param allUpdateExamList
     */
    void updateMedicalExamBatch(@Param("examList") List<ClinicMedicalExam> allUpdateExamList);

    /**
     * 批量修改
     * @param rxList
     */
    void updateMedicalRxBatch(@Param("rxList") List<ClinicMedicalRx> rxList);

    /**
     * 药品冲突互斥检查
     * @param clinicId
     * @param drugItemsJson
     * @return
     */
    List<DrugConflictVo> getConflictsByDrugIdList(@Param("clinicId") Long clinicId,
                                                  @Param("drugItemsJson") String drugItemsJson);

    /**
     * 药品和主诉的冲突检查
     * @param clinicId
     * @param drugItemsJson
     * @param fieldItemsJson
     * @return
     */
    List<DrugConflictVo> getConflictsByField(@Param("clinicId") Long clinicId,
                                             @Param("drugItemsJson") String drugItemsJson,
                                             @Param("fieldItemsJson") String fieldItemsJson);

}
